package Class;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 姚东名
 * Date: 2024-05-18
 * Time: 20:54
 */
class Student2 {
    //字段 成员变量
    private String name;//姓名
    private int age;//年龄
    private double score;//分数
    //静态成员变量 类变量
    private static String className = "111";//班级

    //成员方法：方法的
    //当类加载时 就会被处罚
    static {
        //定义在类中 方法的外面 作用：一般用来初始化静态的成员变量
        className = "123";
        System.out.println("静态代码块当中一般用来初始化静态成员变量……");
    }
    {
        this.name = "mimi";
        System.out.println("实例代码块……");
        /*
        静态代码块的执行(但是只会执行一次) > 实例代码块的执行
        同等级下：顺序优先
         */
    }

    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", score=" + score +
                '}';
    }

    //构造方法：1.特点：没有返回值 2.方法名与类名相同
    public Student2() {
        this.show();
        System.out.println("不带参数的构造方法……");
    }
    public Student2(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
        System.out.println("带有三个参数的构造方法……");
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public static String getClassName() {
        return className;
    }

    public static void setClassName(String className) {
        Student2.className = className;
        //在静态方法中(static方法) 不能使用 this关键字
        //this.age = 10;

    }
    public void show() {
        System.out.println("姓名："+this.name+" 年龄："+this.age+" 分数："+this.score);
        //在非静态方法中可以使用静态的东西：
        System.out.println(Student2.className);//静态成员变量
        System.out.println(Student2.getClassName());//静态成员方法
        //把握一点：静态的 不依赖于对象，属于类 不属于对象！！
        //所以无论在静态方法中还是在非静态方法中 都可以使用静态的东西
        //但是在静态的方法中 非静态的东西无法使用 只能new 一个对象(对象的实例化)才能使用非静态的东西
    }
}
public class Test0518 {
    public static void main(String[] args) {
        //关于静态成员变量的初始化：
        //1.就地初始化 2.通过get、set方法初始化 3.构造方法也可以
        //4.代码块 -> 1.静态代码块 2.非静态代码块/实例代码块/构造代码块 3.同步代码块
        //测试他们的执行顺序：
        Student2 student = new Student2();
        System.out.println("==========");
        Student2 student1 = new Student2("张三",18, 98.5);
        System.out.println(student1);

    }
    public static int add(int x, int y) {
        return x + y;
    }
    public static void main2(String[] args) {
        //对象的实例化:
        Student2 student = new Student2();
        //非静态的成员方法 成员变量 都依赖于对象
        //接口输入：
        student.setAge(15);
        System.out.println(student.getAge());
        //静态方法中可以调用静态方法中可以调用静态方法，不依赖对象
        int ret = add(1,2);
        System.out.println(ret);

        System.out.println(Student2.getClassName());
        //在静态方法中 不能够直接调用 非静态方法
        //因为：静态方法 不依赖于对象，可以直接通过类名进行访问
        //但是：非静态方法中 依赖对象，需要通过对象的引用访问

    }
    public static void main1(String[] args) {
        Student2 student1 = new Student2("张三",18, 98.5);
        student1.show();

        Student2 student2 = new Student2("李四",21, 99.5);
        student2.show();
        //静态成员变量、静态方法不依赖对象
       Student2.setClassName("1111");//接口输入
        System.out.println(Student2.getClassName());//接口输出

    }

}
